/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */

package org.sapra.logon;

import caintra.Sapra.Model.Calendariofacturacionpracticantes;
import caintra.Sapra.Model.PrefacturaCaintra;
import caintra.Sapra.Model.PrefacturaDetalle;
import java.sql.SQLException;
import java.text.SimpleDateFormat;
import java.util.Iterator;
import java.util.List;
import java.util.logging.Level;
import java.util.logging.Logger;
import javax.servlet.http.HttpSession;
import nextapp.echo2.webrender.WebRenderServlet;
import org.sapra.core.DBManager;
import org.sapra.dao.Empresa;
import org.sapra.dao.Factura;
import org.sapra.dao.FacturaPartida;
import org.sapra.dao.Usuario;



/**
 *
 * @author ppratsc
 */
public class dLogin {
    public static boolean Logon(String usr,String pwd){
        boolean resp = false;
        List<Usuario> usuarios = null;
        //Trae los Usuarios
        try {
            // Busca el Usuario en Base de Datos
            DBManager db=new DBManager();
            usuarios = db.getQuery(Usuario.class,"SELECT * FROM usuario WHERE login=?",usr.toLowerCase());
            db=null;

        } catch (SQLException ex) {
            Logger.getLogger(dLogin.class.getName()).log(Level.SEVERE, null, ex);
            return resp;
        }

        if(!usuarios.isEmpty()){

            if(usuarios.size() > 1){
                // Avisar que existen mas de un usuario con el mismo login
            }

            Iterator it = usuarios.iterator();
            Usuario u = (Usuario) it.next();
            //Verifica el Password
            if(u.getPassword().toLowerCase().equals(pwd.toLowerCase())){
                //Guardar los Datos en la Session
                HttpSession session = WebRenderServlet.getActiveConnection().getRequest().getSession();
                session.setAttribute("_usuario",u);
                resp = true;
            }
        }
        return resp;
    }

    public static Usuario getUser(){
        Usuario resp = null;

        HttpSession session = WebRenderServlet.getActiveConnection().getRequest().getSession();
        resp = (Usuario)session.getAttribute("_usuario");

        return resp;
    }

    public static Empresa getEmpresa(){
        Empresa resp = null;

        //Busca el Atributo en la Session
        HttpSession session = WebRenderServlet.getActiveConnection().getRequest().getSession();
        resp = (Empresa)session.getAttribute("_empresa");

        if(resp != null) return resp; // Se encontro la Empresa Default

        // No Existe el Atributo en la Session
        // Lo Busca de la Base de Datos
        String sql = "SELECT ";
        sql += "e.*";
        sql += ",co.fk_grupoCorporativoId";
        sql += " FROM ";
        sql += "empresa e,";
        sql += "corporativo co,";
        sql += "grupocorporativo g";
        sql += " WHERE ";
        sql += "e.fk_corporativoId = co.corporativoId";
        sql += " AND co.fk_grupoCorporativoId = g.grupoCorporativoId";
        sql += " AND empresaid = " + dLogin.getUser().getFk_empresaId();

        List<Empresa> empresas;
        try {
             DBManager db=new DBManager();
            // Busca el Usuario en Base de Datos
            empresas = db.getQuery(Empresa.class,sql);
            db=null;
        } catch (Exception ex) {
            Logger.getLogger(dLogin.class.getName()).log(Level.SEVERE, null, ex);
            return resp;
        }

        if(!empresas.isEmpty()){
            resp = (Empresa) empresas.get(0);
            session.setAttribute("_empresa",resp);
        }

        return resp;
    }

    public static Empresa getEmpresa2(int opc){
        Empresa resp = null;

        String sql = "SELECT ";
        sql += "e.*";
        sql += ",co.fk_grupoCorporativoId";
        sql += " FROM ";
        sql += "empresa e,";
        sql += "corporativo co,";
        sql += "grupocorporativo g";
        sql += " WHERE ";
        sql += "e.fk_corporativoId = co.corporativoId";
        sql += " AND co.fk_grupoCorporativoId = g.grupoCorporativoId";
        sql += " AND empresaid = " + opc;

        List<Empresa> empresas;
        try {
            DBManager db=new DBManager();
            // Busca el Usuario en Base de Datos
            empresas = db.getQuery(Empresa.class,sql);
            db=null;
            resp=new Empresa();
            resp=empresas.get(0);
        } catch (Exception ex) {
            Logger.getLogger(dLogin.class.getName()).log(Level.SEVERE, null, ex);
            return resp;
        }

        return resp;
    }

    public static List<Empresa> getEmpresas(){
        List<Empresa> lista;
        String sql="";

        try {
            sql="SELECT * FROM empresa";
            lista=DBManager.getQuery(Empresa.class, sql);


        } catch (Exception e) {
            return null;
        }
        return lista;
//org.sapra.dep
    }

     public static List<org.sapra.dep.CalendarioFacturacion> getPeriodos(int empresaId){
        List<org.sapra.dep.CalendarioFacturacion> lista;
        String sql="";

        try {
            sql="SELECT * FROM calendariofacturacionpracticantes WHERE fk_empresaId="+empresaId;
            lista=DBManager.getQuery(org.sapra.dep.CalendarioFacturacion.class, sql);
        } catch (Exception e) {
            return null;
        }
        return lista;

    }

     public static Usuario getUsuario(String login){
        List<Usuario> lista;
        Usuario u = null;
        String sql="";

        try {
            sql="SELECT * FROM usuario WHERE login='"+login+"' limit 1";
            lista=DBManager.getQuery(Usuario.class, sql);
            if(lista == null || lista.isEmpty())
                    return null;
            else
                u=(Usuario)lista.get(0);

        } catch (Exception e) {
            return null;
        }
        return u;//select * from factura WHERE fk_periodo=

    }
      public static Calendariofacturacionpracticantes getPeriodo(int periodoid){
        List<Calendariofacturacionpracticantes> lista;
        Calendariofacturacionpracticantes u = null;
        String sql="";

        try {
            sql="SELECT * FROM calendariofacturacionpracticantes c "
                    + " WHERE calendarioFacturacionPracticantesId="+periodoid;
            lista=DBManager.getQuery(Calendariofacturacionpracticantes.class, sql);
            if(lista == null || lista.isEmpty())
                    return null;
            else
                u=(Calendariofacturacionpracticantes)lista.get(0);

        } catch (Exception e) {
            return null;
        }
        return u;//select * from factura WHERE fk_periodo=

    }

     
     public static int insert_Total_Header(PrefacturaCaintra head){
        int id_nuevo=-1;
        String sql="";
        SimpleDateFormat spd=new SimpleDateFormat("yyyy-MM-dd hh:mm:ss");
        try {
            sql="INSERT INTO prefactura_caintra(monto_a_pagar,porcentaje,gasto_adm,subtotal_sin_seguro,seguro_empresa,"
                    + " adeudos_empresa,subtotal_conseguro,iva_1,total_1,abono_empresa,subtotal_con_abono,iva_2,total_final,"
                    + " tipo_factura,periodoId,usuarioId,login,fecha_aut,iva_factura,razon_social,razon_empresa,rfc,comision,periodo)"
                    + "VALUES("+head.getMonto_a_pagar()+","+head.getPorcentaje()+","
                    + ""+head.getGasto_adm()+","+head.getSubtotal_sin_seguro()+","+head.getSeguro_empresa()+","
                    + ""+head.getAdeudos_empresa()+","+head.getSubtotal_conseguro()+","
                    + ""+head.getIva_1()+","+head.getTotal_1()+","+head.getAbono_empresa()+","
                    + ""+head.getSubtotal_con_abono()+","+head.getIva_2()+","+head.getTotal_final()+""
                    + ","+head.getTipo_factura()+","+head.getPeriodoId()+","+head.getUsuarioId()+",'"+head.getLogin()+"',"
                    + "'"+spd.format(head.getFecha_aut())+"',"+head.getIva_factura()+""
                    + ",'"+head.getRazon_social()+"','"+head.getRazon_Empresa()+"','"+head.getRfc()+"'"
                    + ","+head.getComision()+""
                    + ",'"+head.getPeriodo()+"');";
            id_nuevo = DBManager.insert(sql);
        } catch (Exception e) {
            return -1;
        }
        return id_nuevo;

    }

    public static int insertTotales(List<PrefacturaDetalle> total,int id){
        int res=-1;
        String sql="";
        PrefacturaDetalle pd;
        sql="INSERT INTO prefactura_detalle(nombre,paterno,materno,centrocosto,fec_inicio,fec_termino,"
                + " dias_a_pagar,monto_beca,monto_pagar,neto,seg_emp,seg_pract,ajuste,deduccion,practicante_Id,fk_prefacturaId,"
                + "cuenta,departamento,fec_baja)VALUES";
        try {
            if(total.size()<= 0)
                return -1;
            for(int i=0;i < total.size();i++){
                pd=(PrefacturaDetalle)total.get(i);
                sql+="('"+pd.getNombre()+"','"+pd.getPaterno()+"','"+pd.getMaterno()+"',"
                        + "'"+pd.getCentrocosto()+"','"+pd.getFec_inicio()+"','"+pd.getFec_termino()+"',"+pd.getDias_a_pagar()+","
                        + ""+pd.getMonto_beca()+","+pd.getMonto_pagar()+","
                        + ""+pd.getNeto()+","+pd.getSeg_emp()+","+pd.getSeg_pract()+","
                        + ""+pd.getAjuste()+","+pd.getDeduccion()+","+pd.getPracticante_Id()+","+id
                        + ",'"+pd.getCuenta()+"'"
                        + ",'"+pd.getDepartamento()+"'"
                        + ",'"+pd.getFec_baja()+"'"
                        +")";
                        if((i+1)<total.size())
                            sql+=",";

            }
            res=DBManager.insert(sql);
        } catch (Exception e) {
            return -1;
        }
        return res;

    }


     public static List<Factura> getFacturas(){
        List<Factura> lista;
        Factura u = null;
        String sql="";

        try {
            sql="select p.*,c.fk_empresaId AS empresaId  from factura p "
                    + " INNER JOIN calendariofacturacionpracticantes c "
                    + " ON p.fk_periodo = c.calendarioFacturacionPracticantesId"
                    +" where p.fk_periodo=63005";
                    //+ " order by fec_autorizacion desc";
            lista=DBManager.getQuery(Factura.class, sql);
            if(lista == null || lista.isEmpty())
                    return null;
            else
                u=(Factura)lista.get(0);

        } catch (Exception e) {
            return null;
        }
        return lista;

    }

     public static List<FacturaPartida> getPartidas(int periodoId){
        List<FacturaPartida> lista;
        FacturaPartida u = null;
        String sql="";

        try {
            sql="select p.* ,"
                    + " getXMonto("+periodoId +",p.fk_convenioid,0) AS ajusmonto, "
                    + " getXMonto("+periodoId +",p.fk_convenioid,1) AS dedmonto, "
                    + " getDia("+periodoId +",p.fk_convenioid,0) AS ajustedia, "
                    + " getDia("+periodoId +",p.fk_convenioid,1) AS deducdia "
                    + " from facturapartida p "
                    + " WHERE p.fk_periodoId="+periodoId +" order by p.nombre,p.paterno,p.materno";
            lista=DBManager.getQuery(FacturaPartida.class, sql);

        } catch (Exception e) {
            return null;
        }
        return lista;

    }


    public static void setEmpresa(Empresa emp) {
        if(emp != null){
            HttpSession session = WebRenderServlet.getActiveConnection().getRequest().getSession();
            session.setAttribute("_empresa",emp);
        }
    }


}